In a Zen-like manner, NaN
isn’t equal to anything, even itself. So comparisons (>, <, >=, <=
) where one
operand is NaN
or evaluates to NaN
always return false
. Specifically, undefined
and objects that
cannot be converted to numbers evaluate to NaN
when used in numerical comparisons.
This rule raises an issue when there is at least one path through the code where one of the operands to a comparison is NaN
,
undefined
or an Object
which cannot be converted to a number.
Noncompliant code example
var x; // x is currently "undefined"
if (someCondition()) {
x = 42;
}
if (42 > x) { // Noncompliant; "x" might still be "undefined"
doSomething();
}
var obj = {prop: 42};
if (obj > 24) { // Noncompliant
doSomething();
}
Compliant solution
var x;
if (someCondition()) {
x = 42;
} else {
x = foo();
}
if (42 > x) {
doSomething();
}
var obj = {prop: 42};
if (obj.prop > 24) {
doSomething();
}